約 1,825,708 件
https://w.atwiki.jp/javamock/pages/36.html
テキストエディタ ソース ver1.0 TextEditor.java import java.awt.Dimension; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; /** * テキストエディタのメインクラスです * * @author mock * */ public class TextEditor extends JFrame implements ActionListener { /** * serialVersionUID */ private static final long serialVersionUID = 1L; /** * テキストエリア */ private JTextArea textArea; /** * メニューバー */ private JMenuBar menuBar; /** * ファイル選択 */ private JFileChooser fileChooser = new JFileChooser(); /** * テキストエリアの幅 */ private final int textAreaWidth = 300; /** * テキストエリアの高さ */ private final int textAreaHeight = 300; /** * 新規のタイトル名 */ private final String undifinedTitle = "title"; /** * バージョン */ private final String version = "ver1.0"; /** * コンストラクタ * * @throws HeadlessException */ TextEditor() throws HeadlessException { super(); setVisible(true); setTitle(undifinedTitle); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // メニューバーの作成 createMenuBar(); // テキストエリアの作成 createTextArea(textAreaWidth, textAreaHeight); pack(); } /** * mainメソッドです * * @param args */ public static void main(String[] args) { new TextEditor(); } /** * メニューバーを作成するメソッドです */ private void createMenuBar() { menuBar = new JMenuBar(); getRootPane().setJMenuBar(menuBar); // ファイル(F) JMenu menuFile = new JMenu("ファイル(F)"); menuFile.setMnemonic( F ); menuBar.add(menuFile); // ファイル(F)>新規(N) JMenuItem menuItemNew = new JMenuItem("新規(N)"); menuItemNew.setMnemonic( N ); menuItemNew.setActionCommand("NEW"); menuItemNew.addActionListener(this); menuFile.add(menuItemNew); // ファイル(F)>開く(O) JMenuItem menuItemOpen = new JMenuItem("開く(O)"); menuItemOpen.setMnemonic( O ); menuItemOpen.setActionCommand("OPEN"); menuItemOpen.addActionListener(this); menuFile.add(menuItemOpen); // ファイル(F)>上書き保存(S) JMenuItem menuItemSave = new JMenuItem("上書き保存(S)"); menuItemSave.setMnemonic( S ); menuItemSave.setActionCommand("SAVE"); menuItemSave.addActionListener(this); menuFile.add(menuItemSave); // ファイル(F)>名前を付けて保存(A) JMenuItem menuItemSaveAs = new JMenuItem("名前を付けて保存(A)"); menuItemSaveAs.setMnemonic( A ); menuItemSaveAs.setActionCommand("SAVEAS"); menuItemSaveAs.addActionListener(this); menuFile.add(menuItemSaveAs); // ヘルプ(H) JMenu menuHelp = new JMenu("ヘルプ(H)"); menuHelp.setMnemonic( H ); menuBar.add(menuHelp); // ヘルプ(H)>バージョン情報 JMenuItem menuItemVersion = new JMenuItem("バージョン情報"); menuItemVersion.setActionCommand("VERSION"); menuItemVersion.addActionListener(this); menuHelp.add(menuItemVersion); } /** * テキストエリアを作成するメソッドです * * @param width * テキストエリアの幅 * @param height * テキストエリアの高さ */ private void createTextArea(int width, int height) { textArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(textArea); scrollPane.setPreferredSize(new Dimension(width, height)); getContentPane().add(scrollPane); } /* * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(ActionEvent e) { String actionCommand = e.getActionCommand(); if (actionCommand.equals("NEW")) { newFile(); } else if (actionCommand.equals("OPEN")) { openFile(); } else if (actionCommand.equals("SAVE")) { save(); } else if (actionCommand.equals("SAVEAS")) { saveAs(); } else if (actionCommand.equals("VERSION")) { showVersionInfo(); } } /** * 「ファイル(F)>新規(N)」選択時に処理を行うメソッドです */ private void newFile() { fileChooser.setSelectedFile(null); fileChooser.setName(undifinedTitle); setTitle(undifinedTitle); textArea.setText(""); } /** * 「ファイル(F)>開く(O)」選択時に処理を行うメソッドです */ private void openFile() { try { if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); FileReader fileReader = new FileReader(selectedFile); textArea.read(fileReader, null); fileReader.close(); setTitle(fileChooser.getName(selectedFile)); } } catch (Exception e) { e.printStackTrace(); } } /** * 「ファイル(F)>上書き保存(S)」選択時に処理を行うメソッドです */ private void save() { // ファイルが既に開かれている場合 if (fileChooser.getSelectedFile() != null) { try { writeFile(); } catch (Exception e) { e.printStackTrace(); } return; } saveAs(); } /** * 「ファイル(F)>名前を付けて保存(A)」選択時に処理を行うメソッドです */ private void saveAs() { try { // ファイルダイアログ「保存」が選択された場合 if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { writeFile(); File selectedFile = fileChooser.getSelectedFile(); setTitle(fileChooser.getName(selectedFile)); } } catch (Exception e) { e.printStackTrace(); } } /** * 「ヘルプ(H)>バージョン情報」選択時に処理を行うメソッドです */ private void showVersionInfo() { JOptionPane.showMessageDialog(this, version, "version", JOptionPane.INFORMATION_MESSAGE); } /** * fileChooserで選択されているファイルを保存するメソッドです * * @throws IOException */ private void writeFile() throws IOException { FileWriter fileWriter = new FileWriter(fileChooser.getSelectedFile()); fileWriter.write(textArea.getText()); fileWriter.close(); } }
https://w.atwiki.jp/sevenlives/pages/2003.html
ジェネリクス オート・ボクシング? 拡張forループ? Java
https://w.atwiki.jp/l2j-wiki/pages/4.html
それでは、最初にJava2 SDK 5.0(1.5.0.01)をDLから始めましょう。 まず JDK 6 Update 5 ttp //java.sun.com/javase/downloads/index.jsp へ行きJDK 6 Update 5の横にあるDownloadを選んで RequiredでAcceptにチャックを入れ Windows Offline Installation, Multi-language からDownloadして下さい。 後は、自分の分かる適当な場所に保存して下さい。 次にEclipseをDLしましょう。 以下のソフトのあるサイトに行って赤く囲ってあるdownloadsをクリックして下さい。 Eclipse ttp //www.eclipse.org/ DLページを開いたら次も同じく赤く囲ってあるとこをクリックして下さい。 (このサイトを作った時のバージョンは、3.1.2ですが最新のをDLして下さい。 次に赤く囲ってあるミラーサイトをクリックしてDLして下さい。 あとは、自分の分かる適当な場所に保存して下さい。 英語が苦手な人はEclipse 日本語パックもDLすることをおすすめします。 日本語パックは、DLページにあるAll versionsをクリックして そして3.1.1_Language_Packsをクリック。 次にDLサイトに行ったら NLpack1_FeatureOverlay-eclipse-SDK-3.1.1.zipと NLpack1-eclipse-SDK-3.1.1a-win32.zipをDLして下さい。 これでJavaとEclipseのDLは終わりました。次にインストールと設定を説明します。 次JavaとEclipseのインストールと設定 戻る
https://w.atwiki.jp/m_shige1979/pages/1229.html
変数・定数 変数 変数は データ型 + 変数名で定義 値を初期化して実行した場合 import java.io.*; /* サンプルソース */class sample03{ public static void main(String args[]){ // hellow world test // 変数の定義 int a; a = 100; System.out.println("a = " + a); a = a * 2; System.out.println("a = " + a); }} コンパイル・結果 c \tool\java javac sample03.java c \tool\java java sample03a = 100a = 200 c \tool\java 値を初期化せずに実行した場合 import java.io.*; /* サンプルソース */class sample04{ public static void main(String args[]){ // hellow world test // 変数の定義 int a; System.out.println("a = " + a); }} コンパイル・結果 c \tool\java javac sample04.javasample04.java 10 変数 a は初期化されていない可能性があります。 System.out.println("a = " + a); ^エラー 1 個 c \tool\java 定数 定数は "final" + データ型 + 変数名で定義 値を初期化して実行した場合 import java.io.*; /* サンプルソース */class sample05{ public static void main(String args[]){ // 定数の定義 final int b = 1000; System.out.println("b = " + b); }} コンパイル・結果 c \tool\java javac sample05.java c \tool\java java sample05b = 1000 c \tool\java 値を初期化後に値を設定して実行した場合 import java.io.*; /* サンプルソース */class sample06{ public static void main(String args[]){ // 定数の定義 final int b = 1000; System.out.println("b = " + b); b = 100; System.out.println("b = " + b); }} コンパイル・結果 c \tool\java javac sample06.javasample06.java 9 final 変数 b に値を代入することはできません。 b = 100; ^エラー 1 個 c \tool\java
https://w.atwiki.jp/memo_java/pages/2.html
メニュー トップページ Java関連 Twitter関連 Android Java成績考査 リンク @wiki @wikiご利用ガイド 他のサービス 2ch型掲示板レンタル 無料掲示板レンタル wikiの編集方法についてはこちら 左メニューの編集方法についてはこちら ここを編集
https://w.atwiki.jp/javamock/pages/27.html
float Javaにおいてfloatはプリミティブ型の1つです。 floatはメモリ領域を32ビット確保します。 floatはIEEE 754規格の32ビット単精度の浮動小数点数に基づきデータを扱います。 符号部:1ビット 指数部:8ビット 仮数部:23ビット となっているようです。 非ゼロの正の値の範囲は 最大値 3.40282347e+38F 最小値 1.40239846e-45F とされているようです。 なので、約±3.40282347e+38の範囲がfloatの値の範囲の目安です。 floatのデータにはfまたはFを指定しなくてはいけません。 floatは非数や無限大も表せるようです。以下のように表されます。 NaN:非数 Infinity:無限大 float 使用例 1 FloatSample.java class FloatSample { public static void main(String[] args) { float floatVariable1 = 0.3F; float floatVariable2 = -1.5E10F; float floatPositiveMax = 3.40282347e+38F; float floatPositiveMin = 1.40239846e-45F; float floatNotANumber = Float.NaN; float floatPositiveInfinity = Float.POSITIVE_INFINITY; float floatNegativeInfinity = Float.NEGATIVE_INFINITY; System.out.println("floatVariable1 " + floatVariable1); System.out.println("floatVariable2 " + floatVariable2); System.out.println("floatPositiveMax " + floatPositiveMax); System.out.println("floatPositiveMin " + floatPositiveMin); System.out.println("floatNotANumber " + floatNotANumber); System.out.println("floatPositiveInfinity " + floatPositiveInfinity); System.out.println("floatNegativeInfinity " + floatNegativeInfinity); } } 実行結果 C \java javac FloatSample.java C \java java FloatSample floatVariable1 0.3 floatVariable2 -1.50000005E10 floatPositiveMax 3.4028235E38 floatPositiveMin 1.4E-45 floatNotANumber NaN floatPositiveInfinity Infinity floatNegativeInfinity -Infinity
https://w.atwiki.jp/gtavi_gta6/pages/906.html
Java Update Coffeeshop {java.update();} 概要 解説 店舗、外見など 概要 日本語:ジャバ・アップデート・コーヒーショップ 業種:飲食業(カフェ) 所在地:ロックフォードヒルズ 解説 インドネシアのジャワ島のコーヒー、Java coffee (ジャワコーヒー)の店。 プログラミング言語のJava の名称の由来がJava coffeeであることを、そのままテーマにしている。 場所はロックフォードヒルズ。アミュネーション6からデルペロ大通りを東へ少し行った所。 2004年に開店。 店の看板にはこう書かれているが… package java.cappuccino; import java.shot.milk.foam; public class Breakfast extends Meal { private double espresso; private int bread; private int bacon; public void sandwich () { bread = 2; bacon = 2; return bread + bacon; どうもプログラミングをかじった人に言わせると、この構文だと「コンパイル時エラー」を起こすようだ。 いかにも難解でそれっぽい文を見せてはいるが、実はコーヒーの味も経営も大した事がないのだろう…。 店舗、外見など Boulevard Del Perro, Rockford Hills
https://w.atwiki.jp/javamock/pages/32.html
BigDecimal Javaにおいてjava.math.BigDecimalクラスは固定小数点数を扱うクラスです。 浮動小数点数は2の乗数分の1を足して小数の計算をしますが、それでは誤差が発生してしまうことがあります。 固定小数点数だと、「整数値×10の乗数」として整数部の計算と小数点の位置の計算を分けて行うのでより正確な値が返ります。 ちなみにdecimalとは「小数」、「小数の」、「10進法の」などという意味だそうです。 BigDecimalのコンストラクタは以下のようなものがあります。 BigDecimal(BigInteger val) BigIntegerをBigDecimalに変換します。 BigDecimal(BigInteger unscaledVal, int scale) BigIntegerのスケールなしの値とintスケールをBigDecimalに変換します。 BigDecimal(double val) doubleをBigDecimalに変換します。 BigDecimal(String val) BigDecimalのString表現をBigDecimalに変換します。 BigDecimal 使用例 1 BigDecimalの基本的な計算を行うメソッドを使ってみます。 addメソッド:加算 multiplyメソッド:乗算 divideメソッド:除算 BigDecimalSample1.java import java.math.BigDecimal; class BigDecimalSample1 { public static void main(String[] args) { BigDecimal bigDecimalObject1 = new BigDecimal("0.5"); BigDecimal bigDecimalObject2 = new BigDecimal("0.25"); System.out.println("bigDecimalObject1\t \t" + bigDecimalObject1); System.out.println("bigDecimalObject2\t \t" + bigDecimalObject2); // add(BigDecimal val) メソッド:加算 System.out.println("bigDecimal add\t\t \t" + bigDecimalObject1.add(bigDecimalObject2)); // multiply(BigDecimal val) メソッド:乗算 System.out.println("bigDecimal multiply\t \t" + bigDecimalObject1.multiply(bigDecimalObject2)); // divide(BigDecimal val) メソッド:除算 System.out.println("bigDecimal divide\t \t" + bigDecimalObject1.divide(bigDecimalObject2)); } } 実行結果 C \java javac BigDecimalSample1.java C \java java BigDecimalSample1 bigDecimalObject1 0.5 bigDecimalObject2 0.25 bigDecimal add 0.75 bigDecimal multiply 0.125 bigDecimal divide 2 BigDecimal 使用例 2 (divide) 上記のプログラムのbigDecimalObject2のデータの値を0.255などとするとdivideメソッドでjava.lang.ArithmeticExceptionが起こります。 ArithmeticExceptionは算術計算で例外的条件が発生した場合にスローされます。 これは丸めモードを指定していないためです。以下のメソッドを使うと正常に動作します。 divide(BigDecimal val, int roundingMode) divide(BigDecimal val, int scale, int roundingMode) scaleにはスケールを指定します。 roundingModeには丸めモードを指定します。 BigDecimalSample2.java import java.math.BigDecimal; class BigDecimalSample2 { public static void main(String[] args) { BigDecimal bigDecimalObject1 = new BigDecimal("0.5"); BigDecimal bigDecimalObject2 = new BigDecimal("0.255"); System.out.println("bigDecimalObject1\t \t" + bigDecimalObject1); System.out.println("bigDecimalObject2\t \t" + bigDecimalObject2); // divide(BigDecimal val, int scale, RoundingMode roundingMode) System.out.println( "bigDecimal divide\t \t" + bigDecimalObject1.divide(bigDecimalObject2, 3, BigDecimal.ROUND_HALF_UP)); // divide(BigDecimal val, int scale, RoundingMode roundingMode) System.out.println( "bigDecimal divide\t \t" + bigDecimalObject1.divide(bigDecimalObject2, 7, BigDecimal.ROUND_HALF_UP)); } } 実行結果 C \java java BigDecimalSample2 bigDecimalObject1 0.5 bigDecimalObject2 0.255 bigDecimal divide 1.961 bigDecimal divide 1.9607843 スケール・丸めモード 固定小数点数の場合、「整数値×10の乗数」として整数部の計算と小数点の位置の計算を分けて行います。 スケールは10×-?乗の?のことです。 以下の場合「3」、「7」が各々のスケールになります。 1.961 = 1961 × 10の-3乗 1.9607843 = 19607843× 10の-7乗 丸めモードは丸め処理のモードを指定するものです。 BigDecimalのフィールドに丸めモードを指定するための定数が用意されています。 static intROUND_CEILING 正の無限大に近づくように丸めるモードです。 static intROUND_DOWN 0 に近づくように丸めるモードです。 static intROUND_FLOOR 負の無限大に近づくように丸めるモードです。 static intROUND_HALF_DOWN 「もっとも近い数字」 に丸めるモードです。 static intROUND_HALF_EVEN 「もっとも近い数字」 に丸めるモードです。 static intROUND_HALF_UP 「もっとも近い数字」に丸めるモードです。 static intROUND_UNNECESSARY 要求される演算の結果が正確であり、丸めが必要でないことを表す丸めモードです。 static intROUND_UP 0 から離れるように丸めるモードです。
https://w.atwiki.jp/javafx/pages/29.html
はじめてのJavaFX 元ネタ:http //jfx.wikia.com/wiki/Step_by_Step _How_to_build_your_first_JavaFX_application コンテンツ はじめに JavaFXの開発環境を整える JavaFXプログラミングHello World テキストフィールドの追加 マルチコンポーネントの利用 クリック時のイベント処理 Bindingの実装 トリガーの追加 top はじめに ただJavaFXのソースコードを眺めているだけではJavaFXを理解することはできません。そこで簡単なJavaFXアプリケーションを作りながらJavaFXについて学びます。 ここでは電卓を作ることを目標にします。電卓を作るために必要なテキストフィールドであったりボタン、ボタンイベント、JavaFXの特徴でもあるトリガーについて紹介します。それでは順番にJavaFXアプリケーションを作っていきましょう! top JavaFXの開発環境を整える ここではeclipseでの設定方法を紹介します。 eclipseの導入についてはチュートリアル/JavaFXの開発環境を整えるを参照して下さい。 JavaFXアプリケーションの作成準備 まず、新規プロジェクトからJavaのプロジェクトを作ります。このときプロジェクトの名前などは任意で構いません。又、特に設定をする必要もありません。 次にこのプロジェクトにJavaFXのファイルを追加します。さきほど作ったプロジェクト名の上で右クリックをして「新規」→「その他」をクリックします。そしてその中にあるJavaFX Fileを選択して次へ手順を進めれば完了です。 コンパイルする コンパイル・実行の際は、プログラムの引数にJavaFXのファイル名(xxx.fx)を指定する必要があります。 「構成及び実行」を開いて「JavaFX Application」をダブルクリックします。このときに引数を指定します。例えばHelloWorld.fxというファイルをコンパイル・実行したい場合は以下のような設定になります。 top JavaFXプログラミング Hello World まずは簡単な「Hello,World」アプリケーションを作ってみましょう。 import javafx.ui.*; Frame{ title "はじめてのJavaFX" width 200 height 50 content Label{ text "Hello,World" } visible true } 実行例: top テキストフィールドの追加 電卓を作る上でテキストフィールドは必要になってきます。さきほどのアプリケーションをテキストフィールドを使って表現してみましょう。 import javafx.ui.*; Frame{ title "はじめてのJavaFX" width 200 height 50 content TextField{ editable false value "Hello,World" } visible true } 実行例: これはさきほどのLabelをTextFieldに置き換えただけですね。ちなみに上記の例でのテキストフィールドはユーザが編集を加えることができません。 top マルチコンポーネントの利用 電卓にはボタンが必要です、そのためにマルチコンポーネントを追加していきましょう。一般的にGUIの実装では、レイアウトマネージャーを用いてGUIの実装を行います。ここでは単純な例として、シンプルなレイアウトであるFlowLayoutを取り上げます。 JavaFXにはレイアウトに関する便利なクラスが用意されています。例えばFlowLayoutの場合、FlowPanelsというクラスが用意されています。このようにJavaFXではレイアウトに関するクラスは「xxxPanel」という名前規則を持っています。 import javafx.ui.*; Frame{ title "はじめてのJavaFX" width 200 height 100 content FlowPanel{ --*1 content [ TextField { editable false value "Hello,World" width 100 }, Button{ text "a" }, Button{ text "b" }, Button{ text "Clear" } --*2 ] } --*1 visible true } 実行例: ここでは複数のコンポーネントを配列を用いて表現しています。配列は、Java同様「[」と「]」で表され、配列の要素は,(カンマ)で区切ることで増やすことができます。また最後の要素にカンマを書くこともできます(*2のところにカンマを書くことができる)。 このサンプルではFlowPanelのcontentに複数のコンポーネントを配置していますが、Frameのcontentにも複数のコンポーネントを配列を用いて表現することができます。しかし、同じ方法ではうまくいきません。まずは*1のところをコメントアウトしてみます。単純にこれでFrameのcontentに複数のコンポーネントを配置したことになりました。これを実行してみましょう。 そうすると想像した結果とは異なったものが出てきたはずです。これはすべてのコンポーネントがFrameのBorderLayout.CENTERに従って重なりあってしまうからです。 top クリック時のイベント処理 ボタンをクリックしたらなんらかの動作が起こるようにしたいものです。 これを実現するにはボタンにActionListenersのようなものを加える必要があります。 これから先はボタンの動作などの設定なので、GUIの変化がありません。つまり実行例を載せれません。ちょっと味気ないですが我慢して下さいね D。 また期待した動きをしているかどうかは、System.out.printlnでコンソールに出力される結果を見るか、テキストフィールドの値の変化で確かめてください。 import javafx.ui.*; import java.lang.System; --*1 var win = Frame{ title "はじめてのJavaFX" width 200 height 100 content FlowPanel{ content [ TextField { editable false value "Hello,World" width 100 }, Button{ text "a" action operation(){ System.out.println(" a clicked"); } }, Button{ text "b" action operation(){ System.out.println(" b clicked"); } }, Button{ text "Clear" action operation(){ System.out.println(" c clicked"); } } ] } visible true }; ボタンをクリックしたときのイベント処理は説明する必要がないくらい簡単ですね。クリック時の処理をoperation()の中に書くだけです。しかし、クリックしたときにただコンソールに文字を出力するだけでは電卓も作れません。ここで学んだことだけではまだそれを作ることはできません。 注意することは1つインポートするものが増えたことです(*1)。Java同様にほぼすべてのクラスをインポートする場合はjava.lang.*と表記することもできます。 top Bindingの実装 (Bindingに関するもっと詳しい情報はここを見てください) 日本語訳は現在製作中 JavaFXでは、開発者が自由に新しいクラスを定義したり変数を定義したりすることができます。さきほどの例でも"var win = Frame{..."と変数を使っていました。このことは柔軟なコーディングの助けとなるだけではなく、GUIの実装において、デザインと処理を分離しやすくなります。 Bindingとは自分で定義したデータモデルを自身で利用するための手続きです。これを利用することで変数のいくつかを他の要素に依存させることもできます。例えば、テキストフィールドの値を他の値に依存させることができるのです。ボタンをクリックするとテキストフィールドの値が変化するといった動作もこれを利用します。 import javafx.ui.*; import java.lang.System; class TextValue{ attribute value String; operation clear(); --*1 } operation TextValue.clear(){ --*1 value = ""; } var model = TextValue{ --*2 value "Hello,Model" }; var win = Frame{ title "はじめてのJavaFX" width 200 height 100 content FlowPanel{ content [ TextField { editable false value bind model.value --*3 width 100 }, Button{ text "a" action operation(){ model.value = model.value.concat("a"); --*4 } }, Button{ text "b" action operation(){ model.value = model.value.concat("b"); --*4 } }, Button{ text "Clear" action operation(){ model.clear(); --*5 } } ] } visible true }; このプログラムには3つの新しい要素が加わっています。 それは、クラスの宣言、メソッドの宣言と変数の宣言です。クラスの宣言ではオブジェクト(attributes)とメソッド(operations)を定義しています。 まず妙に感じるのは*1の部分でしょう。メソッドの宣言部分ではそのメソッドがなんであるかを定義していないからです。そのメソッドがなんであるか、具体的に宣言しているのは「operation TextValue.clear(){...」のところです。 変数の宣言(*2を参照)では新しくTextValueのインスタンスを作り、変数valueの値を"Hello,Model"としています。 テキストフィールドのvalueの値は(*3を参照)前の例とは少し異なっています。テキストフィールドの値を宣言するとき初期値に特定の値を入れてしまいがちですが、model.valueの値を参照したほうがより良いと言えます(直接"Hello,Model"とするのではなく、"Hello,Model"と書かれた値を参照したほうが良い)。 このことは"bind"を使っていることと深く関係しています。ここでbindを用いると、model.valueの値が変化したとき、すぐにその変化をテキストフィールドに反映させることができます。また、Bindingは双方向であることに注意しましょう。もしテキストフィールドが編集可能であったとき、テキストフィールドの値の変化をmodel.valueへ反映させることもできます。 *4のところではaボタンとbボタンを定義し、これらボタンをクリックするとmodel.valueの後ろへ1文字追加( a もしくは b )する処理になっています。ここで注意することは文字列の連結です。Javaでは文字列の連結に「+」を使いますが、JavaFXではそれが使えません。くわしくはこちらを参照して下さい。 最後にClearボタンについてですが(*5を参照),さきほどのaボタンやbボタンと基本的なことは同じです。model.valueの文字列を消去する動作を加えるのに、直接「model.value = ""」と書くこともできますが、今回はメソッドの働きを確認したいので、「model.clear()」を用いています。 top トリガーの追加 まだこのプログラムでは1つ見逃していることがあります。 テキストフィールドの値はいつでも変化させることができますが、その値の変化を知ることはできません。これを解決するには、bind命令を少し書き換えるだけでは実装することはできません。 そこでトリガーという機能の紹介に移りたいと思います、これはJavaFXの特徴ともいうべき機能です。これにより定義したattributeが変化したときなんらかの動作を加えることができます。ここでは単純なトリガーの例を示しますが、トリガーはもっと奥深い機能であること忘れないで下さい。 import javafx.ui.*; import java.lang.System; class TextValue{ attribute value String; operation clear(); } operation TextValue.clear(){ value = ""; } var model = TextValue{ value "Hello,Model" }; trigger on TextValue.value[oldValue] = newValue{ --*1 System.out.println("old ".concat(oldValue).concat("; new ").concat(newValue)); } var win = Frame{ title "はじめてのJavaFX" width 200 height 100 content FlowPanel{ content [ TextField { editable false value bind model.value width 100 }, Button{ text "a" action operation(){ model.value = model.value.concat("a"); } }, Button{ text "b" action operation(){ model.value = model.value.concat("b"); } }, Button{ text "Clear" action operation(){ model.value = ""; } } ] } visible true }; ここで変更が加えられたのは*1のところだけです。ここでのトリガーの例はまったく無意味な処理であり、この中は簡単に書き換えることができます。 まずはじめのTextValue.valueの部分でトリガーを付加する場所を示しています。次にあるoldValueでは変化する前の古い値を示しています。そして最後にあるnewvValueでは変化した後の新しい値を示しています。oldValueは任意ですので、変化する前の古い値が必要なければこれを省略することもできます。 本文章はここまです。原文にはSwingのコードも掲載されているので、そちらを参照してみるのもいいかもしれません。 top trackback
https://w.atwiki.jp/ce00582/pages/3572.html
game0401 (1)プログラム http //www15.atwiki.jp/ce00582/pages/3571.html (2)コメント (3)リンク http //wisdom.sakura.ne.jp/system/java/net/javanet5.html (4)作業記録 2月21日 ページ作成